package cn.com.cifi.mars.mapper.mars;

import cn.com.cifi.mars.bean.vo.price.PriceVersionListVO;
import cn.com.cifi.mars.entity.PriceValueOrg;
import cn.com.cifi.mars.entity.PriceVersion;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 价格版本表 Mapper 接口
 * </p>
 *
 * @author yyd
 * @since 2019-09-09
 */
public interface PriceVersionMapper extends BaseMapper<PriceVersion> {

    int deleteByPrimaryKey(String id);

    int insertRecord(PriceVersion record);

    //int insertSelective(PriceVersion record);

    PriceVersion selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(PriceVersion record);

    int updateByPrimaryKey(PriceVersion record);

    /**
     * @param projectFid 分期id
     * @param versionTypes 版本类型
     * @param versionStates 版本状态
     * @param isDel 是否删除
     * @return List<PriceVersion>
     */
    List<PriceVersion> selectApprovalVersionByFidAndTypesAndStates(@Param("fid") String projectFid,
                    @Param("versionTypes")List<String> versionTypes,@Param("versionStates") List<String> versionStates,
                    @Param("isDel") int isDel);

    /**
     * @param projectFid 分期id
     * @param versionType 版本类型
     * @param versionStates 版本状态
     * @param isDel 是否删除
     * @return PriceVersion
     */
    PriceVersion selectNewestVersionByFid(@Param("fid")String projectFid,@Param("versionType") String versionType,
                    @Param("versionStates") List<String> versionStates, @Param("isDel") int isDel);

    /**
     * @param priceVersionId 版本id
     * @param isDel 是否删除
     * @return PriceVersion
     */
    PriceVersion selectByVersionId(@Param("priceVersionId")String priceVersionId,@Param("isDel") int isDel);

    void deteleVersionById(@Param("versionId") String versionId, @Param("isDel") int isDel, @Param("user") String alias, @Param("time")LocalDateTime time);

    void deteleOrgByVersionId(@Param("versionId") String versionId, @Param("isDel") int isDel, @Param("time")LocalDateTime time);

    /**
     * @param versionId 版本id
     * @param isDel 是否删除
     * @return List<PriceValueOrg>
     */
    List<PriceValueOrg> selectOrgByVersionId(@Param("versionId") String versionId, @Param("isDel") int isDel);

    /**
     * @param projectFid 分期id
     * @param versionType 版本类型
     * @param isDel 是否删除
     * @return List<PriceVersionListVO>
     */
    List<PriceVersionListVO> selectByProjectFidAndType(@Param("fid") String projectFid,@Param("versionType") String versionType, @Param("isDel") int isDel);

    /**
     * @param projectfId 分期id
     * @param versionType 版本类型
     * @param isDel  是否删除
     * @return PriceVersion
     */
    PriceVersion selectNewestByProjectFidAndType(@Param("fid") String projectfId,@Param("versionType") String versionType, @Param("isDel") int isDel);

    /**
     * @param projectfId 分期id
     * @return PriceVersion
     */
    PriceVersion checkNewVersion(@Param("fid") String projectfId);

    /**
     * @param projectFid 分期id
     * @param isDel 是否删除
     * @return PriceVersion
     */
    PriceVersion selectSaleValue(@Param("fid") String projectFid, @Param("isDel") int isDel);

    /**
     * @param projectFid 分期id
     * @param types 版本类型
     * @param states 版本状态
     * @param isDel 是否删除
     * @return PriceVersion
     */
    PriceVersion selectNewestVersionByFidAndTypes(@Param("fid") String projectFid, @Param("types") List<String> types, @Param("states") List<String> states, @Param("isDel") int isDel);

    /**
     * @param projectFid 分期id
     * @param states 版本状态
     * @param isDel 是否删除
     * @return PriceVersion
     */
    PriceVersion selectCastDecisionNewestVersionByFid(@Param("fid") String projectFid,@Param("states") List<String> states,@Param("isDel") int isDel);

    /**
     * @param projectfId 分期id
     * @param versionType 版本类型
     * @param states  版本状态
     * @param isDel 是否删除
     * @return List<PriceVersion>
     */
    List<PriceVersion> selectPriceVersionByFId(@Param("fid")String projectfId,@Param("type")String versionType,@Param("states") List<String> states,@Param("isDel") int isDel);

    /**
     * @param stageIds 分期ids
     * @param states 版本状态
     * @param isDel 是否删除
     * @return List<PriceVersion>
     */
    List<PriceVersion> selectApprovalStateByStagesIds(@Param("fids") List<String> stageIds, @Param("states") List<String> states, @Param("isDel") int isDel);

    /**
     * 修改版本是否为考核版标签
     * @param isNotAssessment 是否为考核版标签
     * @param projectfId 分期id
     * @param versionType 版本类型
     */
    void updateAssessmentLable(@Param("isNot") int isNotAssessment, @Param("fid") String projectfId, @Param("versionType") String versionType);

    /**
     * @param projectFid 分期id
     * @param versionTypes  版本类型
     * @param versionStates 版本状态
     * @param isDel 是否删除
     * @param now 归属时间
     * @return PriceVersion
     */
    PriceVersion selectNewestVersionByFidAndDate(@Param("fid") String projectFid,@Param("versionTypes") List<String> versionTypes,@Param("versionStates") List<String> versionStates,@Param("isDel") int isDel,@Param("time") LocalDateTime now);

    /**
     * @param projectFid 分期id
     * @param versionType 版本类型
     * @param ascriptionDate 归属月份
     * @param isDel  是否删除
     * @return PriceVersion
     */
    PriceVersion selectNewestDynamicToMonthByPrice(@Param("fid") String projectFid,@Param("versionType") String versionType,@Param("ascriptionDate") LocalDate ascriptionDate,@Param("isDel") int isDel);

    /**
     * @param projectfId 分期id
     * @param versionType 版本类型
     * @param ascriptionDate 归属月份
     * @param versionStates  版本状态
     * @param isDel 是否删除
     * @return PriceVersion
     */
    PriceVersion selectNewestDynamicToMonthByPriceAndStatus(@Param("fid") String projectfId,@Param("versionType") String versionType,@Param("ascriptionDate") LocalDate ascriptionDate,@Param("versionStates") List<String> versionStates,@Param("isDel") int isDel);

    /**
     * @param versionTypes  版本类型
     * @param versionStates 版本状态
     * @param projectfId 分期id
     * @param isDel 是否删除
     * @return List<PriceVersion>
     */
    List<PriceVersion> selectNewestVersionGroupByStageId(@Param("versionTypes") List<String> versionTypes,@Param("versionStates") List<String> versionStates, @Param("projectfId") String projectfId, @Param("isDel") int isDel);

    /**
     * 根据时间、分期id获取明源版本
     * @param projectFid 分期id
     * @param isDel 是否删除
     * @param time 时间
     * @return PriceVersion
     */
    PriceVersion selectValueVersionByTime(@Param("fid") String projectFid, @Param("isDel") int isDel,@Param("time") String time);

    /**
     * @param projectFid 分期id
     * @param types 版本类型
     * @param states 版本状态
     * @param isDel 是否删除
     * @param time 归属时间
     * @return PriceVersion
     */
    PriceVersion selectNewestVersionByFidAndTime(@Param("fid") String projectFid, @Param("types") List<String> types, @Param("states") List<String> states, @Param("isDel") int isDel,@Param("time") String time);

    /**
     * @param projectFid 分期id
     * @param states 版本状态
     * @param isDel 是否删除
     * @param time 归属时间
     * @return PriceVersion
     */
    PriceVersion selectCastDecisionNewestVersionByFidAndTime(@Param("fid") String projectFid,@Param("states") List<String> states,@Param("isDel") int isDel,@Param("time") String time);

    /**
     * @param projectFid 分期id
     * @return List<PriceVersion>
     */
    List<PriceVersion> selectAllSaleAndDynamicVersion(@Param("fid") String projectFid);

    /**
     * @param isDel 是否删除
     * @return List<PriceVersion>
     */
    List<PriceVersion> selectAllProject(@Param("isDel") int isDel);

    String selectArea(@Param("versionId")String versionId,@Param("versionType")String versionType);

	List<PriceVersion> selectListByDate(@Param("yearMonth")String yearMonth);

	List<PriceVersion> selectListByDate2(@Param("yearMonth")String yearMonth);

}
